/***********************************************
//
//  Copyright(C), 2013-2016, GEC Tech. Co., Ltd.
//
//  作者: 林世霖
//  微信公众号：秘籍酷
//  日期: 2016-6
//
//  描述: 在LCD上显示音乐钢琴的界面
//
//  GitHub: github.com/vincent040
//  Bug Report: 2437231462@qq.com
//
***********************************************/

#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <syslog.h>
#include <errno.h>
#include <linux/input.h>

#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/mman.h>
#include <stdbool.h>

#include <linux/fb.h>
#include <sys/mman.h>
#include <sys/ioctl.h>

#include "bmp.h"
#include "ts.h"

int main(int argc, char const *argv[])
{
        // 1，打开LCD设备
        int lcd = open("/dev/fb0", O_RDWR);

        // 2，获取LCD设备的参数
        struct fb_var_screeninfo vinfo;
        ioctl(lcd, FBIOGET_VSCREENINFO, &vinfo);

        // 3，为该LCD设备映射显存
        unsigned char *FB;
        FB = mmap(NULL, vinfo.xres * vinfo.yres * vinfo.bits_per_pixel/8,
                                        PROT_READ|PROT_WRITE, MAP_SHARED, lcd, 0);

        // 4，显示整个钢琴的界面
        //    4.1 显示背景(background.bmp)
        bmp2lcd("background.bmp", FB, &vinfo, 0, 0);

        //    4.2 显示标题栏(bar.bmp)
        bmp2lcd("bar.bmp", FB, &vinfo, 0, 0);

        //    4.3 显示12个琴键(bar.bmp)
        int i;
        for(i=0; i<12; i++)
        {
                bmp2lcd("key_off.bmp", FB, &vinfo, 10+65*i, 47);
        }

        //    4.4 显示LOGO(logo.bmp)
        bmp2lcd("logo.bmp", FB, &vinfo, 214, 355);


        // 5，打开触摸屏设备，开始音乐钢琴
        int ts = open("/dev/event0", O_RDWR);
        struct coordinate coor;

        while(1)
        {
                // 5.1 等待手指触碰，并顺便获取触碰点坐标（coor.x和coor.y）
                wait4touch(ts, &coor);

                // 5.2 根据coor的坐标信息来更新琴键的状态
                bmp2lcd("key_on.bmp", FB, &vinfo,(coor.x-10)/65*65+10, 47);

                // 5.3 根据coor的坐标信息播放相应的琴键声音（暂时不做）
                

                // 5.4 等待手指的松开
                wait4leave(ts);

                // 5.5 将相应的琴键恢复弹起的状态
                bmp2lcd("key_off.bmp", FB, &vinfo,(coor.x-10)/65*65+10,  47);
        }
        
        return 0;
}







        // int ts = open("/dev/event0", O_RDWR);
        // struct coordinate coor;

        // while(1)
        // {
        //         // 5.1 等待手指触碰，并顺便获取触碰点坐标（coor.x和coor.y）

